package com.example.demo.sensitive.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.sensitive.dto.response.CheckResultResponse;
import com.example.demo.sensitive.entity.CheckResult;
import lombok.Data;

import java.util.List;

/**
 * @ClassName CheckResultService
 * @Description 检查结果服务接口
 * @Author System
 * @Date 2025/9/19
 **/
public interface CheckResultService extends IService<CheckResult> {

    /**
     * 分页查询检查结果
     */
    Page<CheckResultResponse> getPageList(Long taskId, int current, int size, String category,
                                         Integer level, String processStatus, String keyword);

    /**
     * 根据ID查询结果详情
     */
    CheckResultResponse getById(Long id);

    /**
     * 根据任务ID查询所有结果
     */
    List<CheckResultResponse> getByTaskId(Long taskId);

    /**
     * 查询高风险结果
     */
    List<CheckResultResponse> getHighRiskResults(Long taskId);

    /**
     * 忽略结果
     */
    void ignoreResult(Long id, String note);

    /**
     * 批量忽略结果
     */
    void batchIgnore(List<Long> ids, String note);

    /**
     * 确认结果
     */
    void confirmResult(Long id, String note);

    /**
     * 生成清理SQL
     */
    String generateCleanSQL(Long id, String action);

    /**
     * 批量生成清理SQL
     */
    List<String> batchGenerateCleanSQL(List<Long> ids, String action);

    /**
     * 执行清理SQL
     */
    Integer executeCleanSQL(String sql, Object options);

    /**
     * 获取结果统计
     */
    ResultStatistics getResultStatistics(Long taskId);

    /**
     * 获取表列统计
     */
    List<TableColumnStatistics> getTableColumnStatistics(Long taskId);

    /**
     * 导出结果
     */
    byte[] exportResults(Long taskId, String format);

    /**
     * 清理任务结果
     */
    void cleanTaskResults(Long taskId);

    /**
     * 清理过期结果
     */
    Integer cleanExpiredResults(int days);

    /**
     * 结果统计类
     */
    @Data
    class ResultStatistics {
        private Integer totalResults;
        private Integer highRiskResults;
        private Integer pendingResults;
        private Integer processedResults;
    }

    /**
     * 表列统计类
     */
    @Data
    class TableColumnStatistics {
        private String tableName;
        private String columnName;
        private Integer resultCount;
    }
}
